home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1993…ch: Other People's Memory / ADC Developer CD (1993-03) (''Other People's Memory'')_iso / Dev.CD Mar 93.iso / Development Platforms / Apple II / Essentials / Technical.Notes / PDOS / TN.PDOS.023 < prev    next >
Encoding:
Text File  |  1992-07-15  |  20.8 KB  |  398 lines  |  [TEXT/GEOL]

  1. Apple II
  2. Technical Notes
  3. _____________________________________________________________________________
  4.                                                   Developer Technical Support
  5. ProDOS 8
  6. #23: ProDOS 8 Changes and Minutia
  7.  
  8. Revised by: Matt Deatherage May 1992
  9. Written by: Matt Deatherage July 1989
  10.  
  11. This Technical Note documents the change history of ProDOS 8 through V2.0.1,
  12. and it supersedes the information on this topic in the ProDOS 8 Technical
  13. Reference Manual and the ProDOS 8 Update.
  14.  
  15. CHANGES SINCE SEPTEMBER 1990:  Updated to include ProDOS 8 version 2.0.1 and
  16. its known bugs.  Replaced APDA references with Resource Central .
  17. _____________________________________________________________________________
  18.  
  19.  
  20. CHANGES?  YOU'RE KIDDING.
  21.  
  22. No.  One of the side effects of evolving technology is that eventually little
  23. things (like the disk operating system) have to change to support the new
  24. technologies.  Every time Apple changes ProDOS 8, the manuals can't be
  25. reprinted.  For one thing, it takes a long time to turn out a manual, by which
  26. time there's often a new version done which the new manual doesn't cover.  For
  27. another thing, programmers and developers don't tend to purchase revised
  28. manuals (our informal research shows that more people have up-to-date Apple
  29. /// RPS documentation than have up-to-date Apple IIc documentation--and this
  30. was done before the Apple IIc Plus was released...).
  31.  
  32. So this Note explains what has changed between ProDOS 8 V1.0 and the current
  33. release, V2.0.1, which began shipping with Apple IIgs System Software 6.0.
  34. Table 1 shows what versions of ProDOS 8 existing documentation covers.
  35.  
  36.                                                          Version
  37.       Document                                           Number
  38.      ------------------------------------------------------------
  39.       ProDOS 8 Technical Reference Manual                1.1.1
  40.       ProDOS 8 Update                                    1.4
  41.       AppleShare Programmer's Guide to the Apple IIgs    1.5
  42.      ------------------------------------------------------------
  43.                     Table 1-ProDOS 8 Documentation
  44.  
  45. PRODOS 1.0
  46.  
  47. This was the first release of ProDOS, which was so unique it didn't even have
  48. to be called ProDOS 8 to distinguish it from ProDOS 16.  If you have
  49. documentation that predates ProDOS 1.0, you should seek professional help from
  50. Resource Central at the address listed in Technical Note #0.
  51. ProDOS 1.0.1
  52.  
  53.    o   Fixed a bug in the STATUS call which affected testing for the
  54.        write-protected condition.
  55.  
  56. ProDOS 1.0.2
  57.  
  58.    o   Changed instructions used in interrupt entry routines on the global
  59.        page so the accumulator would not be destroyed.
  60.    o   Fixed a bug in the Disk II core routines so the motor would shut off
  61.        after recalibration on an error.
  62.  
  63. ProDOS 1.1
  64.  
  65.    o   Changed the internal MLI layout for future expansibility and
  66.        maintenance.
  67.    o   Modified machine ID routines to identify IIc and enhanced IIe ROMs.
  68.    o   Removed code that allowed ProDOS to boot on 48K machines.
  69.    o   Removed the check for the ProDOS version number from the OPEN routine.
  70.    o   Incremented KVERSION (the ProDOS Kernel version) on the global page.
  71.    o   Modified the loader routines to reflect the presence of any 80-column
  72.        card following the established protocol (see ProDOS 8 Technical Note
  73.        #15, How ProDOS 8 Treats Slot 3).  Also, at this time, added code to
  74.        allow slot 3 to be enabled on a IIe if an 80-column card following the
  75.        protocol was found.
  76.    o   Added code to turn off all disk motor phases prior to seeking a track
  77.        in the Disk II driver.
  78.    o   Fixed a bug to prevent accesses to /RAM after it had been removed from
  79.        the device list.
  80.    o   Reduced the size of the /RAM device by one block to protect interrupt
  81.        vectors in the auxiliary language card.  The correct vectors are
  82.        installed at boot time.
  83.  
  84.  
  85. PRODOS 1.1.1
  86.  
  87.    o   Fixed a Disk II driver bug for mapping into drive 1.
  88.    o   Modified machine ID routines to give precedence to identifiable
  89.        80-column cards in slot 3.
  90.  
  91. PRODOS 8 1.2
  92.  
  93.    o   Changed the name from ProDOS to ProDOS 8 to avoid confusion with
  94.        ProDOS 16, which, again, this Note does not discuss.
  95.    o   Introduced the clock driver for the Apple IIgs.  The machine
  96.        identification code was changed to indicate the presence of the clock
  97.        on the IIgs.
  98.    o   Added preliminary network support by adding the network call and
  99.        preliminary network driver space.
  100.    o   Fixed a bug in returning errors from calls to the RAM disk.  Changed
  101.        the RAM disk driver to return values of zero on reads and ignore
  102.        writes to blocks zero, one, four, five, six, and seven, which are not
  103.        accessible as storage in the driver's design.
  104.    o   Added a new system error ($C) for errors when deallocating blocks from
  105.        a tree file.
  106.    o   Fixed a bug in zeroing a Volume Control Block (VCB) when trying to
  107.        reallocate a previously used VCB.
  108.    o   Modified the ProDOS 8 loader code to automatically install up to four
  109.        drives in slot 5 if a SmartPort device is found.  Removed the code to
  110.        always leave interrupts disabled, which leaves the state of the
  111.        interrupt flag at boot time unchanged while ProDOS 8 loads.
  112.    o   Changed the MLI entry to disable interrupts until after the MLIACTV
  113.        flag is set and other ProDOS parameters are initialized.
  114.    o   Modified the QUIT code to allow the Delete key to function the same as
  115.        the left arrow key.  Also fixed a bug so screen holes would not be
  116.        trashed in 80-column mode.  Crunched code to allow soft switch
  117.        accesses to force 40-column text mode.  Fixed a bug so the dispatcher
  118.        would not trash the screen when executed with a NIL prefix.
  119.    o   Modified the ONLINE call so that it could be made to a device that had
  120.        just been removed from the device list by the standard protocol.
  121.        Previous to this change, a VCB for the removed device was left,
  122.        reducing the number of on-line volumes by one for each such device.
  123.        From this point on, removing a device should be followed by an ONLINE
  124.        call to the device just removed.  The call returns error $28 (No
  125.        Device Connected), but deallocates the VCB.
  126.    o   Added a spurious interrupt handler to allow up to 255 unclaimed
  127.        interrupts before system death.
  128.    o   Removed the code which invoked low-resolution graphics on system
  129.        death--it had not worked well and the space was needed.  The system
  130.        had previously had the ability to display "INSERT SYSTEM DISK AND
  131.        RESTART" without also displaying "-ERR xx", which was removed at this
  132.        point for space reasons since the system wasn't using it (and
  133.        hopefully you weren't, either, since it wasn't documented).
  134.    o   Changed MLIACTV to use an ASL instead of an LSR to turn "off" the
  135.        flag.
  136.    o   Changed the OPEN call to correctly return error $4B (Unsupported
  137.        Storage Type) instead of error $4A (incompatible file format for this
  138.        version) when attempting to open a file with an unrecognized storage
  139.        type.
  140.    o   Fixed an obscure bug involving READ in Newline mode.  If the requested
  141.        number of bytes was greater than $FF, and the number of bytes in the
  142.        file after the newline character was read was a multiple of $100, then
  143.        the number of bytes reported transferred by ProDOS was equal to the
  144.        correct number of transferred bytes plus $100.
  145.    o   Starting with V1.2 on an Apple IIgs, stopped switching slot 3 ROM
  146.        space and left the determination of whether the slot or the port was
  147.        enabled to the Control Panel; however, there was a bug in this
  148.        implementation which was fixed in V1.7 and described in ProDOS 8
  149.        Technical Note #15, How ProDOS 8 Treats Slot 3.
  150.    o   Updated the slot-based clock driver's year table through 1991.
  151.    o   Added a feature which allows ProDOS 8 to search for a file named
  152.        ATINIT in the boot volume's root directory, to load and execute it,
  153.        then to proceed normally with the boot process by loading the first
  154.        .SYSTEM file.  No error occurs if the ATINIT file is not found, but
  155.        any other error condition (including the file existing and not having
  156.        file type $E2) causes a fatal error.
  157.    o   Changed loader code so ProDOS 8 could be loaded by ProDOS 16 without
  158.        automatically executing the ATINIT and the first .SYSTEM file.
  159.    o   Changed the device search process in the ProDOS 8 loader so SmartPort
  160.        devices are only installed if they actually exist, and Disk IIs are
  161.        placed with lowest priority in the device list so they are scanned
  162.        last.
  163.    o   Forced Super Hi-Res off on an Apple IIgs when a fatal error occurs.
  164.        (Actually, this did not work, but it was fixed in V1.7.)
  165.    o   Inserted a patch to fix a bug in the first IIgs ROM that caused
  166.        internal $Cn00 ROM space to be left mapped in if SmartPort failed to
  167.        boot.
  168.  
  169. PRODOS 8 1.3
  170.  
  171. WARNING : This is not a stable version of ProDOS due to an illegal 65C02
  172.           instruction which was added.  This version can damage disks if
  173.           used with a 6502 processor.
  174.  
  175.    o   Changed the code that resets phase lines for Disk IIs so phase
  176.        clearing is done with a load instead of a store, since stores to even
  177.        numbered locations cause bus contention, which is major uncool.
  178.        Changed the routine to force access to all eight even locations, which
  179.        not only clears the phases, but also forces read mode, first drive,
  180.        and motor off.  DOS used to do this; ProDOS had not been doing it.  If
  181.        L7 had been left on when the Disk II driver was called and it checked
  182.        write-protect with L6 high, write mode was enabled.  Forcing read mode
  183.        leaves less to chance.
  184.    o   Changed deallocation of index blocks so index blocks are not zeroed,
  185.        allowing the use of file recovery utilities.  Instead, index blocks
  186.        are "flipped" (the first 256 bytes are exchanged with the last 256
  187.        bytes).
  188.    o   Since the UniDisk 3.5 interface card for the ][+ and IIe does not set
  189.        up its device chain unless a ProDOS call is made to it, ProDOS STATUS
  190.        calls are now made to the device before SmartPort STATUS calls.
  191.  
  192. PRODOS 8 1.4
  193.  
  194.    o   Removed an illegal 65C02 instruction which was added in V1.3.
  195.    o   Modified the Disk II driver so a routine that should only clear the
  196.        phase lines only clears the phase lines.  Also clear Q7 to prevent
  197.        inadvertent writes.
  198.  
  199.  
  200. WARNING : The AppleTalk command, which was added in version 1.5, is present
  201.           as a skeleton in this version.  Unfortunately, it's not a useful
  202.           skeleton.  It moves a section of memory from a ProDOS location to
  203.           another location and transfers control, totally oblivious of the
  204.           fact that there is no code at this address.
  205.  
  206.           Even more unfortunate, the server software that ships with the
  207.           Apple IIe Workstation Card is such that when the IIe is booted over
  208.           the network with that server software, it is version 1.4
  209.           (KVERSION = 4).
  210.  
  211.           So if you boot version 1.4 from a local disk, making a $42 call is
  212.           fatal.  See ProDOS 8 Technical Note #21, Identifying ProDOS
  213.           Devices, for a reliable way to identify AppleTalk volumes under
  214.           ProDOS 8 version 1.4.
  215.  
  216. PRODOS 8 1.5
  217.  
  218.    o   ProDOS 8 1.5 is the first version to include network support through
  219.        the ProDOS Filing Interface (PFI) as part of ProDOS 16 or on the Apple
  220.        IIe Workstation Card without booting over the server (see the warning
  221.        under version 1.4).  Made many changes to internal routines for PFI
  222.        location and compatibility at this point.  Crunched and moved code for
  223.        PFI booting and accessibility.
  224.    o   Changed some strings to all uppercase internally for string
  225.        comparisons.
  226.    o   Removed the generic $42 AppleTalk call (the cause of the previous
  227.        warning) which was introduced in V1.2, as PFI gets called through the
  228.        global page.
  229.    o   Changed the ASL to clear the MLIACTV flag back to an LSR.  This
  230.        doesn't make nested levels of busy states possible, but always clears
  231.        the flag before calling interrupt handling routines that check MLIACTV
  232.        as described in the ProDOS 8 Technical Reference Manual.
  233.    o   If an Escape key is detected in the keyboard buffer on an Apple IIc,
  234.        it is removed.  This is friendly to the Apple IIc Plus, the ROM of
  235.        which does not remove the Escape key it uses to detect that the system
  236.        should be booted at normal speed.
  237.  
  238. PRODOS 8 1.6
  239.  
  240.    o   Set up a parallel pointer to correct a PFI misinterpretation of an
  241.        internal MLI pointer.
  242.  
  243. PRODOS 8 1.7
  244.  
  245.    o   Made a change to ensure that ProDOS 8 counts the volume's bitmap
  246.        before incrementing the number of free blocks.  This fixed a bug where
  247.        an uninitialized location was being incremented and decremented,
  248.        incorrectly reporting a Disk Full error where none should have
  249.        occurred.
  250.    o   Changed the handling of slot 3 ROM space to that described in ProDOS 8
  251.        Technical Note #15, How ProDOS 8 Treats Slot 3.
  252.    o   Changed code to permit the invisible bit of the access byte (bit 2) to
  253.        be set by applications.
  254.  
  255. PRODOS 8 1.8
  256.  
  257.    o   Fixed a bug introduced in V1.3.  If an error occurs while calling
  258.        DESTROY on a file, the file is not deleted but the index blocks are
  259.        not swapped back to normal position.  If a subsequent DESTROY of the
  260.        same file succeeds, the volume's integrity is destroyed.  Now ProDOS 8
  261.        marks the file as deleted, even if an error occurs, so any other
  262.        errors do not cause a subsequent MLI call to trash the volume.  Note
  263.        that "undelete" utilities attempting to undelete such a file (one in
  264.        which an error occurred during the DESTROY ) may trash the volume.
  265.    o   Fixed the ONLINE call to ignore the unused low nibble of the unit_num
  266.        parameter when deciding how many bytes to zero in the application's
  267.        buffer.  This change fixes a bug which zeroed only the first 16 bytes
  268.        of the caller's buffer before filling them if an ONLINE call was made
  269.        with a unit_num of $0X, where X is non-zero.
  270.    o   When loading on an Apple IIgs, ProDOS 8 now sets the video mode so the
  271.        80-column firmware is not active when the ProDOS 8 application gets
  272.        control.
  273.    o   Changed internal version checking between GS/OS and ProDOS 8.  Note
  274.        that GS/OS and ProDOS 8 are still tied to each other--versions that
  275.        didn't come on the same disk can't be used together.  The methods for
  276.        checking versions were just altered.
  277.    o   Made the backward compatibility check when opening subdirectories
  278.        inactive.  The test would always fail when opening a subdirectory with
  279.        lowercase characters in the name (as assigned by the ProDOS FST under
  280.        GS/OS), so the check was removed.  Note that using earlier versions of
  281.        ProDOS 8 with such disks causes errors when trying to access files
  282.        with such directories in their pathnames.
  283.    o   Expanded the ProDOS 8 loader code to provide for more room for future
  284.        compatibility.
  285.    o   On a IIgs, installs a patch into the GS/OS stack-based call vector so
  286.        that anyone calling GS/OS routines (like QDStartUp in ROM 03, for
  287.        example) gets an appropriate error instead of performing a JSL into
  288.        the stratosphere.
  289.  
  290. PRODOS 8 1.9
  291.  
  292.    o   New selector and dispatcher code was added for machines with 80
  293.        columns.  The old code is still present for machines without 80-column
  294.        capability.
  295.    o   Fixed two bugs involved in booting into a ".SYSTEM" program larger
  296.        than 38K.  First, ProDOS 8 should be able to boot into a program as
  297.        large as 39.75K, but was returning an error if the ".SYSTEM" program
  298.        was larger than 38K.  Second, when attempting to print the message
  299.        "*** SYSTEM PROGRAM TOO LARGE ***", only one asterisk was printed.
  300.        Both these bugs are fixed.
  301.    o   No longer requires a ".SYSTEM" file when booting.  If ProDOS 8 does
  302.        not find a ".SYSTEM" file and the enhanced selector and dispatcher
  303.        code is installed, ProDOS 8 executes a QUIT call.
  304.    o   KVERSION is still $08.
  305.  
  306.  
  307.  
  308. PRODOS 8 V2.0.1
  309.  
  310.    o   ProDOS 8 now supports more than two SmartPort devices per slot by
  311.        remapping the third device and beyond to different slots.  There's
  312.        still a limit of 14 devices altogether, though.
  313.    o   ProDOS 8 version 2.0.1 and later require a 65C02 microprocessor or
  314.        equivalent; you get RELOCATION/CONFIGURATION ERROR if you don't have
  315.        one.  ProDOS 8 tests for a 65C02 by setting binary-coded decimal (BCD)
  316.        mode and adding $01 to $99, which is the largest negative BCD value
  317.        representable in an 8-bit register.  65C02 microprocessors correctly
  318.        clear the N flag when the addition wraps to zero; 6502 microprocessors
  319.        do not.
  320.  
  321.        Since all of Apple's 65C02 or greater computers also have lower-case
  322.        capability, the ProDOS 8 splash screen now uses lower-case letters.
  323.        After only nine years, too.
  324.  
  325.    o   The file's been rearranged again, so if you have a program that
  326.        patches the P8 file, it probably breaks now.  Please learn your lesson
  327.        and write a .SYSTEM program that patches ProDOS 8 in memory and not on
  328.        disk.
  329.    o   The prefix is now set correctly when launching Applesoft programs.
  330.    o   Old never-used code to handle call $42 is now gone.
  331.    o   Removed some RAM-disk code that was not used.
  332.    o   ProDOS 8 now sets the prefix to empty when you try to set the prefix
  333.        to "/".
  334.    o   The Apple IIgs clock driver inside ProDOS 8 now limits the year to the
  335.        range 00 through 99.
  336.    o   Sparse seedling files are now truncated properly.
  337.    o   When filling up a volume with a WRITE call, ProDOS 8 used to return
  338.        the disk full error but leave the file's mark set past the file's EOF.
  339.        This is now fixed.
  340.    o   If you try to mount a new volume but all eight VCB slots are filled,
  341.        ProDOS 8 now tries to kick out the first volume in the table with no
  342.        open files.  If all volumes have open files, you'll still get error
  343.        $55.
  344.    o   The new quit code (introduced with 1.9) now beeps and lets the user
  345.        try another subdirectory if the one they chose can't be opened.
  346.        Previously it went forward to the next volume.
  347.    o   The new quit code also now closes a directory if it gets a ProDOS
  348.        error in the directory read loop.
  349.    o   When synthesizing a directory entry for a volume, ProDOS 8 always used
  350.        to assume the directory was four blocks long (for 51 files).  The /RAM
  351.        disk's directory is shorter than this (one block), and ProDOS 8 no
  352.        longer returns funky errors when trying to read past the end of this
  353.        shortened directory.  The EOF and blocks used are now returned as $200
  354.        and 1, respectively.
  355.    o   The system death messages are now displayed in the center of the
  356.        40-column screen, bordered by inverse spaces.  This is an improvement
  357.        over the line of garbage showing at the bottom of the screen since
  358.        approximately version 1.5.
  359.    o   The new quit code was rearranged to clear the screen prior to loading
  360.        the selected application.  This insures that MSLOT ($07F8) points to
  361.        the "boot" slot prior to starting the application.  In this way, you
  362.        can launch the ProDOS file from GS/OS to start up GS/OS.  (Note that
  363.        MSLOT must be set properly for this to work.)
  364.    o   If the device search code at start time finds a SCSI SmartPort, a
  365.        SmartPort status call is issued to device #2.  This lets the Apple II
  366.        High-Speed SCSI card build its device tables and return the true
  367.        number of devices connected.  Without this, it always returns "4" for
  368.        slot 5 or "2" for any other slot.
  369.    o   KVERSION is now $21.
  370.  
  371.  
  372. KNOWN PRODOS 8 V2.0.1 BUGS
  373.  
  374.    o   ProDOS 8 still doesn't behave perfectly when 14 or more devices are
  375.        present.  Specifically, the /RAM driver tends to install itself
  376.        without checking to see whether or not there's room in the device
  377.        table.
  378.  
  379. CAUTION : ProDOS 8's remapping of SmartPort devices may interfere with
  380.           intelligent SmartPort peripherals that were already doing
  381.           their own remapping.  ProDOS 8 remaps additional SmartPort
  382.           devices, even if the SmartPort firmware already did this on
  383.           its own, and this can cause problems.  We never said this
  384.           would work, but we never said it wouldn't--ProDOS 8 has no way
  385.           to determine what remapping has already been done.  If you
  386.           make such a card and your customers have problems, tell them
  387.           to disable your SmartPort remapping and let ProDOS 8 do it
  388.           all.
  389.  
  390.  
  391. Further Reference
  392. _____________________________________________________________________________
  393.  
  394.    o   ProDOS 8 Technical Reference Manual
  395.    o   ProDOS 8 Updat
  396.    o   AppleShare Programmer's Guide to the Apple II
  397.    o   ProDOS 8 Technical Note #21, Identifying ProDOS Devices
  398.